//Console do Trabalho Integrado ED1 - POO

//TODO - Realizar a ligacao dos metodos dentro dos menus =)


//biblioteca padrao de entrada e saida
#include <iostream>

    //bibliotecas para a chamada dos metodos especificos
    #include "classes/Pacote.h"
    #include "classes/Vacina.h"
    #include "classes/Frasco.h"
    #include "classes/Doenca.h"
    #include "classes/Cliente.h"
    #include "classes/Paciente.h"
    #include "classes/Agenda.h"
    #include "classes/ItemAgenda.h"
    #include "classes/Carteira.h"
    #include "classes/ItemCarteira.h"
    #include "classes/Pesquisa.h"

using std::cout;
using std::cin;
using std::endl;

void salvar(list<Cliente> &clientes, list<Doenca> &doencas,
            list<Vacina> &vacinas, Agenda &agenda ){
    ofstream fout;

    fout.open("myfile.txt", ios::out);
    list<Doenca>::iterator it;
    //Numero de doencas
    fout<<doencas.size()<<endl<<"|";
	for (it = doencas.begin(); it != doencas.end(); it++) {
		fout<<it->getDescricao()<<endl<<"|";
		fout<<it->getSintoma()<<endl<<"|";
		fout<<it->getConseq()<<endl<<"|";
	}
	list<Vacina>::iterator itv;
	fout<<vacinas.size()<<endl<<"|";
	for (itv = vacinas.begin(); itv != vacinas.end(); itv++) {
		fout<<itv->getDescricao()<<endl<<"|";
		fout<<itv->getIdadeMin()<<endl<<"|";
		fout<<itv->getIdadeMax()<<endl<<"|";
		fout<<itv->getPreco()<<endl<<"|";
		list<Frasco> frascos= itv->getFrascos();
		//Quantidade de frascos
		list<Frasco>::iterator it2;
		fout<<frascos.size()<<endl<<"|";


		for(it2 = frascos.begin(); it2 != frascos.end(); it2++){
            fout<<it2->getCodRotulo()<<endl<<"|";
		}
	}




    //primeiro o numero de clientes
    fout<<clientes.size()<<endl<<"|";
    list<Cliente>::iterator itc;
	for (itc = clientes.begin(); itc != clientes.end(); itc++) {
		//Agora infos do cliente
		fout<<itc->getNome()<<endl<<"|";
		fout<<itc->getCpf()<<endl<<"|";
		//Agora os pacientes do cliente
		list<Paciente> pacientes = itc->getPacientes();
		list<Paciente>::iterator it2;
		//Numero de pacientes
		fout<<pacientes.size()<<endl<<"|";
        for (it2 = pacientes.begin(); it2 != pacientes.end(); it2++) {
            fout<<it2->getNome()<<endl<<"|";
            fout<<it2->getDia()<<endl<<"|";
            fout<<it2->getMes()<<endl<<"|";
            fout<<it2->getAno()<<endl<<"|";
            Carteira &cTemp=it2->getCarteira();
            //Agora a carteira
            list<ItemCarteira> &itens=cTemp.getListItemCarteira();
            //Tamanho da carteira
            fout<<itens.size()<<endl<<"|";
            list<ItemCarteira>::iterator it3;
            for (it3 = itens.begin(); it3 != itens.end(); it3++) {
                fout<<it3->getVacinaAplicada()->getDescricao()<<endl<<"|";
                fout<<it3->getDataAplicacao().getDia()<<endl<<"|";
                fout<<it3->getDataAplicacao().getMes()<<endl<<"|";
                fout<<it3->getDataAplicacao().getAno()<<endl<<"|";
            }

        }
        list<Pacote> pacotes=itc->getPacotes();
        list<Pacote>::iterator it3;
        fout<<pacotes.size()<<endl<<"|";
        for (it3 = pacotes.begin(); it3 != pacotes.end(); it3++) {
            list<Vacina*> lvac=it3->getVacinas();
            list<Vacina*>::iterator it4;
            fout<<lvac.size()<<endl<<"|";
            for (it4 = lvac.begin(); it4 != lvac.end(); it4++) {
                    fout<<(*it4)->getDescricao()<<endl<<"|";
            }
        }
	}

    list<ItemAgenda> itens;
    itens=agenda.getItensAgenda();
    //Tamanho da agenda
    fout<<itens.size()<<endl<<"|";
    list<ItemAgenda>::iterator iti;
    for(iti = itens.begin(); iti != itens.end(); iti++){
        fout<<iti->getDescricao()<<endl<<"|";
        fout<<iti->getDataAgendamento().getDia()<<endl<<"|";
        fout<<iti->getDataAgendamento().getMes()<<endl<<"|";
        fout<<iti->getDataAgendamento().getAno()<<endl<<"|";
        fout<<iti->getDataAgendamento().getHora()<<endl<<"|";
        fout<<iti->getDataAgendamento().getMinuto()<<endl<<"|";
        fout<<iti->getDataAtendimento().getDia()<<endl<<"|";
        fout<<iti->getDataAtendimento().getMes()<<endl<<"|";
        fout<<iti->getDataAtendimento().getAno()<<endl<<"|";
        fout<<iti->getDataAtendimento().getHora()<<endl<<"|";
        fout<<iti->getDataAtendimento().getMinuto()<<endl<<"|";
        fout<<iti->getVacina()->getDescricao()<<endl<<"|";
        fout<<iti->getPaciente()->getNome()<<endl<<"|";
    }
    fout.flush();
    fout.close();


}

void carregar(list<Cliente> &clientes, list<Doenca> &doencas,
            list<Vacina> &vacinas, Agenda &agenda){

    ifstream fin;  // declarations of streams fp_in and fp_out

    fin.open("myfile.txt", ios::in);    // open the streams

    //Tem nada
    if(fin.peek() == std::ifstream::traits_type::eof()) return;
    int sDoenca;
    //Numero de doencas

    fin>>sDoenca;
    fin.ignore(200,'|');

	for (int i =0;i<sDoenca;i++) {
	    string desc, sint, conseq;
        getline(fin,desc);
		fin.ignore(200,'|');
        getline(fin,sint);
        fin.ignore(200,'|');
        getline(fin,conseq);
        fin.ignore(200,'|');
        doencas.push_back(Doenca(desc,sint,conseq));
	}

    int sVacinas;
    fin>>sVacinas;
    fin.ignore(200,'|');

	for (int i =0;i<sVacinas;i++) {
        string desc;
        int idadeMin, idadeMax;
        double preco;

        getline(fin,desc);
        fin.ignore(200,'|');

        fin>>idadeMin;
        fin.ignore(200,'|');

        fin>>idadeMax;
        fin.ignore(200,'|');

        fin>>preco;
        fin.ignore(200,'|');

        vacinas.push_back(Vacina(desc,idadeMin,idadeMax,preco));
        Vacina &tempVacina=vacinas.back(); //retorna referencia, se eu mudar a ref mudo ele
		list<Frasco> &frascos=tempVacina.getFrascos();
		//Quantidade de frascos
        int sFrascos;

		fin>>sFrascos;
		fin.ignore(200,'|');

		for(int j=0;j<sFrascos;j++){

            int codRotulo;

            fin>>codRotulo;
            fin.ignore(200,'|');
            frascos.push_back(Frasco(codRotulo,&tempVacina)); //Talvez de problema, verificar
		}
	}



    //primeiro o numero de clientes
    int sCliente;

    fin>>sCliente;
    fin.ignore(200,'|');
    cout<<"n clientes: "<<sCliente<<endl;
	for (int i=0;i<sCliente;i++) {

		string nome, cpf;

        getline(fin,nome);
        fin.ignore(200,'|');

        getline(fin,cpf);
        fin.ignore(200,'|');


		clientes.push_back(Cliente(nome,cpf));
		Cliente &tempCliente=clientes.back();
		//Agora os pacientes do cliente

		int sPacientes;

		fin>>sPacientes;
		fin.ignore(200,'|');

		list<Paciente> &pacientes = tempCliente.getPacientes();
        for (int j=0;j<sPacientes;j++) {

            string nomePaciente;
            int dia, mes, ano;

            getline(fin,nome);
            fin.ignore(200,'|');

            fin>>dia;
            fin.ignore(200,'|');

            fin>>mes;
            fin.ignore(200,'|');

            fin>>ano;
            fin.ignore(200,'|');
            pacientes.push_back(Paciente(&tempCliente,nome,dia,mes,ano));
            Paciente &tempPaciente=pacientes.back();
            list<ItemCarteira> &itens=tempPaciente.getCarteira().getListItemCarteira();
            //Agora a carteira

            //Tamanho da carteira
            int sItens;

            fin>>sItens;
            fin.ignore(200,'|');
            cout<<endl<<endl<<sItens<<endl<<endl;
            for (int k=0;k<sItens;k++) {

                string descVacina;

                getline(fin,descVacina);
                fin.ignore(200,'|');

                fin>>dia;
                fin.ignore(200,'|');

                fin>>mes;
                fin.ignore(200,'|');

                fin>>ano;
                fin.ignore(200,'|');
                Vacina * tempVacina = Pesquisa::buscarVacina(descVacina,vacinas);
                itens.push_back(ItemCarteira(tempVacina,Date(dia,mes,ano,0,0)));
            }


        }
        list<Pacote> &pacotes=tempCliente.getPacotes();
        int sPacote;
        fin>>sPacote;
        fin.ignore(200,'|');
        for(int m=0;m<sPacote;m++){
            int sVacPac;
            fin>>sVacPac;
            fin.ignore(200,'|');
            pacotes.push_back(Pacote());
            Pacote &temp=pacotes.back();
            for(int n=0;n<sVacPac;n++){
                string descVacPac;
                getline(fin,descVacPac);
                fin.ignore(200,'|');
                temp.addVacina(descVacPac,vacinas);
            }

        }

	}

    int sAgenda;
    fin>>sAgenda;
    fin.ignore(200,'|');
    list<ItemAgenda> &itensAgenda=agenda.getItensAgenda();
    for(int i=0;i<sAgenda;i++){
        string desc, descVac, nomePac;
        int gDia, gMes, gAno, gHora, gMinuto,
        tDia, tMes, tAno, tHora, tMinuto;

        getline(fin,desc);
        fin.ignore(200,'|');
        fin>>gDia;
        fin.ignore(200,'|');
        fin>>gMes;
        fin.ignore(200,'|');
        fin>>gAno;
        fin.ignore(200,'|');
        fin>>gHora;
        fin.ignore(200,'|');
        fin>>gMinuto;
        fin.ignore(200,'|');
        fin>>tDia;
        fin.ignore(200,'|');
        fin>>tMes;
        fin.ignore(200,'|');
        fin>>tAno;
        fin.ignore(200,'|');
        fin>>tHora;
        fin.ignore(200,'|');
        fin>>tMinuto;
        fin.ignore(200,'|');
        getline(fin,descVac);
        fin.ignore(200,'|');
        getline(fin,nomePac);
        fin.ignore(200,'|');
        Vacina * tempVacina=Pesquisa::buscarVacina(descVac,vacinas);
        Paciente * tempPaciente=Pesquisa::buscarPaciente(nomePac,clientes);
        itensAgenda.push_back(ItemAgenda(desc, tempPaciente,Date(gDia,gMes,gAno,gHora,gMinuto),
                                         Date(tDia,tMes,tAno,tHora,tMinuto),
                                         tempVacina));

    }
    fin.close();


}


int main(){
    Agenda agenda;
    list<Cliente> clientes;
    list<Doenca> doencas;
    list<Vacina> vacinas;
    carregar(clientes,doencas,vacinas,agenda);
	int op = 0, op2 = 0; //variaveis para escolha entre as opcoes do menus

	//limpeza da tela do terminal
	cout << "\e[H\e[2J";

	while(op != 6){

		//cabecalho
		cout << "----------------------------------------------------------------" << endl;
		cout << "|                                                              |" << endl;
		cout << "| ..:: Imuni - An immunization center management software ::.. |" << endl;
		cout << "|                                                              |" << endl;
		cout << "----------------------------------------------------------------" << endl;

		//primeiro menu de subdivisao de modulos
		cout << endl << endl << "Menu principal. Selecione a area de deseja acessar:" << endl << endl;
		cout << "1 - Pacote;" << endl << "2 - Vacinas, Frascos e Doencas;" << endl << "3 - Cliente e Paciente;" << endl <<
		"4 - Agenda;" << endl << "5 - Carteira;" << endl << "6 - Sair." << endl << endl;

		//entrada da opcao
		cout << "-> Informe o numero correspondente a opcao desejada: ";
		cin >> op;
		cout << endl;

		while((op < 1) || (op > 7)){
			cout << "------------------------------------------------------------" << endl;
			cout << endl << "Esta opcao nao esta cadastrada, tente novamente." << endl << endl;

			cout << "Menu principal. Selecione a area de deseja acessar:" << endl << endl;
			cout << "1 - Pacote;" << endl << "2 - Vacinas, Frascos e Doencas;" << endl << "3 - Cliente e Paciente;" << endl <<
			"4 - Agenda;" << endl << "5 - Carteira;" << endl << "6 - Sair." << endl << endl;

			cout << "-> Informe novamente o numero correspondente a opcao desejada: ";
			cin >> op;
			cout << endl;

			//limpeza da tela do terminal
			cout << "\e[H\e[2J";
		}

		/***************************************************************************************************************/
		//modulo de gerenciamento dos pacotes*/
		Pacote tempPac;
		while(op == 1){

				//limpeza da tela do terminal
				cout << "\e[H\e[2J";

				cout << "------------------------------------------------------" << endl;
				cout << "|         ..:: Gerenciamento de Pacotes ::..         |" << endl;
				cout << "------------------------------------------------------" << endl;

				//menu do gerenciamento de pacotes
				cout << endl << "1 - Elaborar pacote;" << endl << "2 - Adicionar vacina a um pacote;" << endl <<
				"3 - Remover vacina de um pacote;" << endl << "4 - Calcular valor total de um pacote." << endl <<
				"5 - Associar pacote ao cliente e retornar ao menu principal."<< endl<<
					"6 - Retornar ao menu principal sem salvar."<< endl << endl;

				//entrada da opcao
				cout << "-> Informe o numero correspondente a opcao desejada: ";
				cin >> op2;
				cout << endl;

				//tratamento de erro do gerenciamento de pacotes
				while((op2 < 1) || (op2 > 6)){

					//limpeza da tela do terminal
					cout << "\e[H\e[2J";

					cout << "------------------------------------------------------" << endl;
					cout << endl << "Esta opcao nao esta cadastrada, tente novamente." << endl << endl;

					cout << endl << "1 - Elaborar pacote;" << endl << "2 - Adicionar vacina a um pacote;" << endl <<
					"3 - Remover vacina de um pacote;" << endl << "4 - Calcular valor total de um pacote;" << endl <<
					"5 - Associar pacote ao cliente e retornar ao menu principal."<< endl<<
					"6 - Retornar ao menu principal sem salvar."<< endl << endl;

					cout << "-> Informe novamente o numero correspondente a opcao desejada: ";
					cin >> op2;
					cout << endl;


				}

				//limpeza da tela do terminal
				cout << "\e[H\e[2J";


				//chamada de metodos das opcoes
				if(op2 == 1){
					string nPaciente;
                    cout<<"Digite o nome do paciente para elaborar o pacote"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nPaciente);
                    Paciente * tempPaci=Pesquisa::buscarPaciente(nPaciente,clientes);
                    if(tempPaci!=NULL){
                        tempPac.elaborarPacote(tempPaci,vacinas);
                        cout<<"Pacote elaborado";
                        cin.ignore(200,'\n');
                        getchar();
                    }else{
                        cout<<"O cliente não tem nenhum paciente com esse nome associado a ele.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
                    }
					op2 = 0;
				} else if(op2 == 2){
					string nVac;
					cout<<"Digite o nome da vacina"<<endl;
					cin.ignore(200,'\n');
					getline(cin,nVac);
					if(!tempPac.addVacina(nVac,vacinas)){
                        cout<<"Nao ha vacina com esse nome.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
					}
					op2 = 0;
				} else if(op2 == 3){
					string nVac;
					cout<<"Digite o nome da vacina"<<endl;
					cin.ignore(200,'\n');
					getline(cin,nVac);
					if(!tempPac.removeVacina(nVac)){
                        cout<<"Nao ha vacina com esse nome.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
					}
					op2 = 0;
				} else if(op2 == 4){
                    cout<<"O valor total é de R$ "<<tempPac.calcularValorTotal()<<endl;
                    cin.ignore(200,'\n');
                    getchar();
					op2 = 0;
				}else if(op2 == 5){
				    Cliente * tempCli;

                    string nCliente;
                    cout<<"Digite o nome do cliente"<<endl;

                    cin.ignore(200,'\n');
                    getline(cin,nCliente);
                    tempCli=Pesquisa::buscarCliente(nCliente,clientes);
                    if(tempCli==NULL){
                            cout<<"Cliente inexistente. \nAbortando...\n";
                            cin.ignore(200,'\n');
                            getchar();
                            op2=0;

                    }else{
                        op=0;

                        tempCli->adicionarPacote(tempPac);
                    }
				}else if(op2 == 6){
                    op=0;
				}
		}

		/***************************************************************************************************************/
	 	//modulo de gerenciamento de vacinas, frascos e doencas
	 	while(op == 2){

	 			//limpeza da tela do terminal
				cout << "\e[H\e[2J";

	 			cout << "------------------------------------------------------" << endl;
				cout << "|..:: Gerenciamento de Vacinas, Frascos e Doencas ::..|" << endl;
				cout << "------------------------------------------------------" << endl;

				//menu do gerenciamento de vacinas, frascos e doencas
				cout << endl << "1 - Adicionar vacina;" << endl << "2 - Alterar vacina;" << endl <<
				"3 - Remover vacina;" << endl << "4 - Consultar informacoes de uma vacina;" << endl <<
				"5 - Adicionar frasco de uma vacina;" << endl <<
				"6 - Remover frasco de uma vacina;" << endl <<
				"7 - Adicionar doenca;" << endl << "8 - Alterar doenca;" << endl << "9 - Remover doenca;" << endl <<
				"10 - Consultar informacoes sobre uma doenca;" << endl << "11 - Retornar ao menu principal." << endl <<
				endl;

				cout << "-> Informe o numero correspondente a opcao desejada: ";
				cin >> op2;
				cout << endl;

				//tratamento de erro do gerenciamento de vacinas, frascos e doenca
				while((op2 < 1) || (op2 > 11)){

					//limpeza da tela do terminal
					cout << "\e[H\e[2J";

					cout << "------------------------------------------------------" << endl;
					cout << endl << "Esta opcao nao esta cadastrada, tente novamente." << endl << endl;

                    cout << endl << "1 - Adicionar vacina;" << endl << "2 - Alterar vacina;" << endl <<
                    "3 - Remover vacina;" << endl << "4 - Consultar informacoes de uma vacina;" << endl <<
                    "5 - Adicionar frasco de uma vacina;" << endl <<
                    "6 - Remover frasco de uma vacina;" << endl <<
                    "7 - Adicionar doenca;" << endl << "8 - Alterar doenca;" << endl << "9 - Remover doenca;" << endl <<
                    "10 - Consultar informacoes sobre uma doenca;" << endl << "11 - Retornar ao menu principal." << endl <<
                    endl;


					cout << "-> Informe novamente o numero correspondente a opcao desejada: ";
					cin >> op2;
					cout << endl;
				}

				//limpeza da tela do terminal
				cout << "\e[H\e[2J";

				//chamada de metodos das opcoes
				if(op2 == 1){
                    int idadeMin, idadeMax;
                    double preco;
                    string nomeVac;
                    cout<<"Digite o nome da vacina"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nomeVac);
                    cout<<"Digite a idade minima"<<endl;
                    cin>>idadeMin;
                    cout<<"Digite a idade maxima"<<endl;
                    cin>>idadeMax;
                    cout<<"Digite o preco";
                    cin>>preco;
					vacinas.push_back(Vacina(nomeVac,idadeMin,idadeMax,preco));

					op2 = 0;
				} else if(op2 == 2){
                    string nomeVac;
                    cout<<"Digite o nome da vacina"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nomeVac);
                    Vacina * tempVac = Pesquisa::buscarVacina(nomeVac,vacinas);
                    if(tempVac==NULL){
                            cout<<"Vacina inexistente.\nAbortando...\n";
                            cin.ignore(200,'\n');
                            getchar();
                    }else{
                        cout<<"O que deseja alterar?"<<endl<<"1 - Nome"<<endl<<"2 - Idade minima"<<endl<<
                        "3 - Idade maxima"<<endl<<"4 - Preco"<<endl<<endl;
                        int op3;
                        cin>>op3;
                        if(op3==1){
                            cout<<"Digite o novo nome"<<endl;
                            string novoNome;
                            cin>>novoNome;
                            tempVac->setDescricao(novoNome);
                        }else if(op==2){
                            cout<<"Digite a nova idade minima"<<endl;
                            int novaIdade;
                            cin>>novaIdade;
                            tempVac->setIdadeMin(novaIdade);
                        }else if(op==3){
                            cout<<"Digite a nova idade maxima"<<endl;
                            int novaIdade;
                            cin>>novaIdade;
                            tempVac->setIdadeMax(novaIdade);
                        }else if(op==4){
                            cout<<"Digite o nome preco"<<endl;
                            double novoPreco;
                            cin>>novoPreco;
                            tempVac->setPreco(novoPreco);
                        }else{
                            cout<<"Opcao invalida"<<endl;
                        }

                    }
					op2 = 0;
				} else if(op2 == 3){
					string nomeVac;
					cout<<"Digite o nome da vacina"<<endl;
					cin.ignore(200,'\n');
					getline(cin,nomeVac);
					if(!Pesquisa::buscarApagarVacina(nomeVac,vacinas)){
                            cout<<"Vacina inexistente.\nAbortando...\n";
                            cin.ignore(200,'\n');
                        getchar();

					}
					op2 = 0;
				} else if(op2 == 4){
				    string nomeVac;
                    cout<<"Digite o nome da vacina"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nomeVac);
                    Vacina * tempVac = Pesquisa::buscarVacina(nomeVac,vacinas);
                    if(tempVac!=NULL){
                        cout<<"O nome da vacina eh "<<tempVac->getDescricao()<<endl<<"A idade minima eh "<<
                        tempVac->getIdadeMin()<<endl<<"A idade maxima eh "<<tempVac->getIdadeMax()<<endl<<
                        "O preco eh "<<tempVac->getPreco()<<endl<<endl;
                        cin.ignore(200,'\n');
                        getchar();
                    }else{
                        cout<<"Vacina inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
                    }

					op2 = 0;
				} else if(op2 == 5){
				    string nomeVac;
                    cout<<"Digite o nome da vacina"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nomeVac);
                    Vacina * tempVac = Pesquisa::buscarVacina(nomeVac,vacinas);
					if(tempVac!=NULL){
                        int novoCodRotulo;
                        cout<<"Digite o codigo do rotulo"<<endl;
                        cin>>novoCodRotulo;
                        tempVac->addFrasco(novoCodRotulo);
                    }else{
                        cout<<"Vacina inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
                    }
					op2 = 0;

				} else if(op2 == 6){
				    string nomeVac;
                    cout<<"Digite o nome da vacina"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nomeVac);
                    Vacina * tempVac = Pesquisa::buscarVacina(nomeVac,vacinas);
					if(tempVac!=NULL){

                        if(!tempVac->removeFrasco()){
                            cout<<"Essa vacina ainda nao tem frascos associados"<<endl;
                        }
                    }else{
                        cout<<"Vacina inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
                    }
					op2 = 0;
				} else if(op2 == 7){
					string nomeDoenca, sintomasDoenca, conseqDoencas;
					cout<<"Digite o nome da doenca"<<endl;
					cin.ignore(200,'\n');
					getline(cin,nomeDoenca);
                    cout<<"Digite os sintomas da doenca"<<endl;
                    getline(cin,sintomasDoenca);
                    cout<<"Digite as consequencias da doenca"<<endl;
                    getline(cin,conseqDoencas);
                    doencas.push_back(Doenca(nomeDoenca,sintomasDoenca,conseqDoencas));
					op2 = 0;
				} else if(op2 == 8){
				    string nomeDoenca;
					cout<<"Digite o nome da doenca"<<endl;
					cin.ignore(200,'\n');
					getline(cin,nomeDoenca);
					Doenca * tempDoenca = Pesquisa::buscarDoenca(nomeDoenca,doencas);
					if(tempDoenca!=NULL){
                        cout<<"O que deseja alterar?"<<endl;
                        cout<<"1 - Nome da doenca"<<endl<<"2 - Sintomas da doenca"<<endl<<
                        "3 - Consequencias da doenca"<<endl;
                        int op3;
                        cin>>op3;
                        if(op3==1){
                            string novoNome;
                            cout<<"Digite o novo nome"<<endl;
                            cin.ignore(200,'\n');
                            getline(cin,novoNome);
                            tempDoenca->setDescricao(novoNome);
                        }else if(op3==2){
                            string novoSintoma;
                            cout<<"Digite o novo sintoma"<<endl;
                            cin.ignore(200,'\n');
                            getline(cin,novoSintoma);
                            tempDoenca->setSintoma(novoSintoma);
                        }else if(op3==3){
                            string novaConseq;
                            cout<<"Digite a nova consquencia"<<endl;
                            cin.ignore(200,'\n');
                            getline(cin,novaConseq);
                            tempDoenca->setConsequencia(novaConseq);
                        }else{
                            cout<<"Opcao invalida.\n Abortando...\n"<<endl;
                            cin.ignore(200,'\n');
                        getchar();
                        }

					}else{
                        cout<<"Doenca inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
					}

					op2 = 0;
				} else if(op2 == 9){
				    string nomeDoenca;
					cout<<"Digite o nome da doenca"<<endl;
					cin.ignore(200,'\n');
					getline(cin,nomeDoenca);

					if(!Pesquisa::buscarApagarDoenca(nomeDoenca,doencas)){

                        cout<<"Doenca inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
					}

					op2 = 0;
				} else if(op2 == 10){
				    string nomeDoenca;
					cout<<"Digite o nome da doenca"<<endl;
					cin.ignore(200,'\n');
					getline(cin,nomeDoenca);
					Doenca * tempDoenca = Pesquisa::buscarDoenca(nomeDoenca,doencas);
					if(tempDoenca!=NULL){
                        cout<<"O nome da doenca eh "<<tempDoenca->getDescricao()<<endl<<
                        "O sintoma da doenca eh "<<tempDoenca->getSintoma()<<endl<<
                        "As consequencias da doenca sao "<<tempDoenca->getConseq()<<endl<<endl;
                        getchar();
                        cin.ignore(200,'\n');
					}else{
                        cout<<"Doenca inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
					}

					op2 = 0;
				}else  op=0;

	 	}

	 	/***************************************************************************************************************/
	 	//modulo de gerenciamento de clientes e pacientes
	 	while(op == 3){

	 			//limpeza da tela do terminal
				cout << "\e[H\e[2J";

	 			cout << "------------------------------------------------------" << endl;
				cout << "|    ..:: Gerenciamento de Cliente e Paciente::..    |" << endl;
				cout << "------------------------------------------------------" << endl;

				//menu do gerenciamento de clientes e pacientes
				cout << endl << "1 - Adicionar cliente;" << endl << "2 - Alterar cliente;" << endl <<
				"3 - Remover cliente;" << endl << "4 - Consultar informacoes de um cliente;" << endl <<
				"5 - Adicionar paciente;" <<endl <<
				"6 - Alterar um paciente;" << endl << "7 - Remover paciente;" << endl <<
				"8 - Consultar informacoes de um paciente;" << endl <<
				"9 - Visualizar pacotes de um cliente;" << endl <<
				 "10 - Retornar ao menu principal." << endl <<
				endl;

				cout << "-> Informe o numero correspondente a opcao desejada: ";
				cin >> op2;
				cout << endl;

				//tratamento de erro do gerenciamento de clientes e pacientes
				while((op2 < 1) || (op2 > 10)){

					//limpeza da tela do terminal
					cout << "\e[H\e[2J";

					cout << "------------------------------------------------------" << endl;
					cout << endl << "Esta opcao nao esta cadastrada, tente novamente." << endl << endl;

					cout << endl << "1 - Adicionar cliente;" << endl << "2 - Alterar cliente;" << endl <<
                    "3 - Remover cliente;" << endl << "4 - Consultar informacoes de um cliente;" << endl <<
                    "5 - Adicionar paciente;" <<endl <<
                    "6 - Alterar um paciente;" << endl << "7 - Remover paciente;" << endl <<
                    "8 - Consultar informacoes de um paciente;" << endl << "9 - Retornar ao menu principal." << endl <<
                    endl;

					cout << "-> Informe novamente o numero correspondente a opcao desejada: ";
					cin >> op2;
					cout << endl;
				}

				//limpeza da tela do terminal
				cout << "\e[H\e[2J";

				//chamada de metodos das opcoes
				if(op2 == 1){
                    string nomeCliente,cpfCliente;
                    cout<<"Digite o nome do cliente"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nomeCliente);
                    cout<<"Digite o numero do CPF"<<endl;
                    cin>>cpfCliente;
                    clientes.push_back(Cliente(nomeCliente,cpfCliente));

					op2 = 0;
				} else if(op2 == 2){
				    string nomeCliente;
				    cout<<"Digite o nome do cliente"<<endl;
				    cin.ignore(200,'\n');
                    getline(cin,nomeCliente);
				    Cliente * tempCliente = Pesquisa::buscarCliente(nomeCliente,clientes);
				    if(tempCliente!=NULL){
                        cout<<"O que deseja alterar?"<<endl;
                        cout<<"1 - Nome"<<endl<<"2 - CPF"<<endl;
                        int op3;
                        cin>>op3;
                        if(op3==1){
                            string novoNome;
                            cout<<"Digite o nome"<<endl;
                            cin.ignore(200,'\n');
                            getline(cin,novoNome);
                            tempCliente->setNome(novoNome);
                        }else if(op3==2){
                            string novoCpf;
                            cout<<"Digite o CPF"<<endl;
                            cin.ignore(200,'\n');
                            getline(cin,novoCpf);
                            tempCliente->setCpf(novoCpf);
                        }
				    }else{
                        cout<<"Cliente inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
				    }

					op2 = 0;
				} else if(op2 == 3){
					string nomeCliente;
				    cout<<"Digite o nome do cliente"<<endl;
				    cin.ignore(200,'\n');
				    getline(cin,nomeCliente);
				    if(!Pesquisa::buscarApagarCliente(nomeCliente,clientes)){
                        cout<<"Cliente inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
				    }
					op2 = 0;
				} else if(op2 == 4){
					string nomeCliente;
				    cout<<"Digite o nome do cliente"<<endl;
				    cin.ignore(200,'\n');
                    getline(cin,nomeCliente);
				    Cliente * tempCliente = Pesquisa::buscarCliente(nomeCliente,clientes);
				    if(tempCliente!=NULL){
                        cout<<"O nome do cliente eh "<<tempCliente->getNome()<<endl
                        <<"O CPF do cliente eh "<<tempCliente->getCpf()<<endl;
                        cin.ignore(200,'\n');
                        getchar();

				    }else{
                        cout<<"Cliente inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
				    }
					op2 = 0;
				} else if(op2 == 5){
				    string nomeCliente;
				    cout<<"Digite o nome do cliente"<<endl;
				    cin.ignore(200,'\n');
				    getline(cin,nomeCliente);
				    Cliente * tempCliente = Pesquisa::buscarCliente(nomeCliente,clientes);
				    if(tempCliente!=NULL){
                        string novoNome;
                        int novoDia, novoMes, novoAno;
                        cout<<"Digite o nome do paciente"<<endl;

                        getline(cin,novoNome);
                        //cout<<"Nome - "<<novoNome<<endl;
                        cout<<"Digite o dia de nascimento do paciente"<<endl;
                        cin>>novoDia;
                        cout<<"Digite o mes de nascimento do paciente"<<endl;
                        cin>>novoMes;
                        cout<<"Digite o ano de nascimento do paciente"<<endl;
                        cin>>novoAno;
                        tempCliente->novoPaciente(novoNome,novoDia,novoMes,novoAno);
				    }else{
                        cout<<"Cliente inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
				    }

					op2 = 0;
				} else if(op2 == 6){
				    string nomePaciente;
				    cout<<"Digite o nome do paciente"<<endl;
				    cin.ignore(200,'\n');
				    getline(cin,nomePaciente);
				    Paciente * tempPaciente = Pesquisa::buscarPaciente(nomePaciente,clientes);
				    if(tempPaciente!=NULL){
                        cout<<"O que deseja alterar?"<<endl;
                        cout<<"1 - Nome"<<endl<<"2 - Data de nascimento"<<endl;
                        int op3;
                        cin>>op3;
                        if(op3==1){
                            string novoNome;
                            cout<<"Digite o nome"<<endl;
                            cin.ignore(200,'\n');
                            getline(cin,novoNome);
                            tempPaciente->setNome(novoNome);

                        }else if(op3==2){
                            int novoDia, novoMes, novoAno;
                            cout<<"Digite o dia de nascimento do paciente"<<endl;
                            cin>>novoDia;
                            cout<<"Digite o mes de nascimento do paciente"<<endl;
                            cin>>novoMes;
                            cout<<"Digite o ano de nascimento do paciente"<<endl;
                            cin>>novoAno;
                            tempPaciente->setDataNasc(novoDia,novoMes,novoAno);
                        }


				    }else{
                        cout<<"Paciente inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
				    }
					op2 = 0;
				} else if(op2 == 7){
				    string nomeCliente;
				    cout<<"Digite o nome do cliente"<<endl;
				    cin.ignore(200,'\n');
				    getline(cin,nomeCliente);
				    Cliente * tempCliente = Pesquisa::buscarCliente(nomeCliente,clientes);
				    if(tempCliente!=NULL){
                        string nomePaciente;
                        cout<<"Digite o nome do paciente";
                        cin.ignore(200,'\n');
                        getline(cin,nomePaciente);
                        if(!tempCliente->removerPaciente(nomePaciente)){
                            cout<<"Paciente inexistente.\nAbortando...\n";
                            cin.ignore(200,'\n');
                        getchar();
                        }
				    }else{
                        cout<<"Cliente inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
				    }

					op2 = 0;
				} else if(op2 == 8){
				    string nomePaciente;
				    cout<<"Digite o nome do paciente"<<endl;
				    cin.ignore(200,'\n');
				    getline(cin,nomePaciente);
				    Paciente * tempPaciente = Pesquisa::buscarPaciente(nomePaciente,clientes);
				    if(tempPaciente!=NULL){
                        cout<<"Nome do paciente eh "<<tempPaciente->getNome()<<endl<<
                        "Data de nascimento do paciente eh dia "<<tempPaciente->getDia()<<
                        " mes "<<tempPaciente->getMes()<<
                        " ano "<<tempPaciente->getAno()<<endl<<
                        "Idade do paciente eh"<<tempPaciente->getIdade()<<endl;
                        cin.ignore(200,'\n');
                        getchar();
				    }else{
                        cout<<"Paciente inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
				    }

					op2 = 0;
				}else if(op2==9){
                    string nomeCliente;
				    cout<<"Digite o nome do cliente"<<endl;
				    cin.ignore(200,'\n');
				    getline(cin,nomeCliente);
				    Cliente * tempCliente = Pesquisa::buscarCliente(nomeCliente,clientes);
				    if(tempCliente!=NULL){

                        int cont=1;
                        list<Pacote> &pacotes=tempCliente->getPacotes();
                        if(pacotes.size()!=0){
                            list<Pacote>::iterator it;
                            for (it = pacotes.begin(); it != pacotes.end(); it++) {
                                list<Vacina*> &tvacinas = it->getVacinas();
                                list<Vacina*>::iterator it2;
                                cout<<"Pacote "<<cont<<endl;
                                cont++;
                                for (it2 = tvacinas.begin(); it2 != tvacinas.end(); it2++) {
                                    cout<<(*it2)->getDescricao()<<endl;
                                }
                                cout<<endl;
                            }
                        }else{
                            cout<<"Este cliente nao tem pacotes associados"<<endl;
                        }
                        cin.ignore(200,'\n');
                        getchar();
				    }else{
                        cout<<"Cliente inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
				    }



                }else op=0;

		}

		/***************************************************************************************************************/
	 	//modulo de gerenciamento de agenda e itemagenda
	 	while(op == 4){

	 			//limpeza da tela do terminal
				cout << "\e[H\e[2J";

	 			cout << "------------------------------------------------------" << endl;
				cout << "|         ..:: Gerenciamento de Agenda ::..          |" << endl;
				cout << "------------------------------------------------------" << endl;

				//menu do gerenciamento de agenda e itemagenda
				cout << endl << "1 - Adicionar uma tarefa a agenda;" << endl << "2 - Alterar uma tarefa da agenda;"
					<< endl << "3 - Remover uma tarefa da agenda;" << endl << "4 - Consultar uma tarefa da agenda;" <<
					endl << "5 - Limpar agenda" << endl <<"6 - Marcar atendimento como realizado"<<endl<<
					 "7 - Retornar ao menu principal." << endl << endl;

				cout << "-> Informe o numero correspondente a opcao desejada: ";
				cin >> op2;
				cout << endl;

				//tratamento de erro do gerenciamento de agenda e itemagenda
				while((op2 < 1) || (op2 > 7)){

					//limpeza da tela do terminal
					cout << "\e[H\e[2J";

					cout << "------------------------------------------------------" << endl;
					cout << endl << "Esta opcao nao esta cadastrada, tente novamente." << endl << endl;

					cout << endl << "1 - Adicionar uma tarefa a agenda;" << endl << "2 - Alterar uma tarefa da agenda;"
					<< endl << "3 - Remover uma tarefa da agenda;" << endl << "4 - Consultar uma tarefa da agenda;" <<
					endl << "5 - Limpar agenda" << endl <<"6 - Marcar atendimento como realizado"<<endl<<
					 "7 - Retornar ao menu principal." << endl << endl;

					cout << "-> Informe novamente o numero correspondente a opcao desejada: ";
					cin >> op2;
					cout << endl;
				}

				//limpeza da tela do terminal
				cout << "\e[H\e[2J";

				//chamada de metodos das opcoes
				if(op2 == 1){
				    string nomePaciente,nomeVacina,descricaoEvento;
                    int dia,mes,ano,hora,minuto;
                    cout<<"Digite a descricao do evento"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,descricaoEvento);
                    cout<<"Digite o nome do paciente"<<endl;
                    getline(cin,nomePaciente);
                    cout<<"Digite o dia do atendimento"<<endl;
                    cin>>dia;
                    cout<<"Digite o mes do atendimento"<<endl;
                    cin>>mes;
                    cout<<"Digite o ano do atendimento"<<endl;
                    cin>>ano;
                    cout<<"Digite a hora do atendimento"<<endl;
                    cin>>hora;
                    cout<<"Digite o minuto do atendimento"<<endl;
                    cin>>minuto;
                    cout<<"Digite o nome da vacina"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nomeVacina);
                    Vacina * tempVacina=Pesquisa::buscarVacina(nomeVacina,vacinas);
                    if(tempVacina!=NULL){
                        if(!agenda.inserirEvento(descricaoEvento,nomePaciente,nomeVacina,dia,mes,ano,hora,minuto,clientes,vacinas)){

                            cout<<"Paciente inexistente.\nAbortando...\n";
                            cin.ignore(200,'\n');
                        getchar();
                        }

                    }else{
                        cout<<"Vacina inexistente.\nAbortando...\n";
                        cin.ignore(200,'\n');
                        getchar();
                    }


					op2 = 0;
				} else if(op2 == 2){
				    string descricaoEvento;
				    cout<<"Digite a descricao do evento"<<endl;
				    cin.ignore(200,'\n');
				    getline(cin,descricaoEvento);
				    if(agenda.buscarEvento(descricaoEvento)!=NULL){
                        cout<<"O que deseja alterar?"<<endl;
                        cout<<"1 - Data de atendimento"<<endl<<
                        "2 - Mudar vacina"<<endl<<
                        "3 - Mudar descricao"<<endl;
                        int op3;
                        cin>>op3;
                        if(op3==1){
                            int dia,mes,ano,hora,minuto;
                            cout<<"Digite o dia do atendimento"<<endl;
                            cin>>dia;
                            cout<<"Digite o mes do atendimento"<<endl;
                            cin>>mes;
                            cout<<"Digite o ano do atendimento"<<endl;
                            cin>>ano;
                            cout<<"Digite a hora do atendimento"<<endl;
                            cin>>hora;
                            cout<<"Digite o minuto do atendimento"<<endl;
                            cin>>minuto;
                            agenda.modificaEventoDAt(descricaoEvento,dia,mes,ano,hora,minuto);
                        }else if(op3==2){
                            string nomeVacina;
                            cout<<"Digite o nome da vacina"<<endl;
                            cin.ignore(200,'\n');
                            getline(cin,nomeVacina);
                            Vacina * tempVacina=Pesquisa::buscarVacina(nomeVacina,vacinas);
                            if(tempVacina!=NULL){
                                agenda.modificaEventoVac(descricaoEvento,tempVacina);
                            }else{
                                cout<<"Vacina inexistente.\nAbortando...\n";
                                cin.ignore(200,'\n');
                        getchar();
                            }

                        }else if(op3==3){
                            string novoDescricaoEvento;
                            cout<<"Digite a descricao do evento"<<endl;
                            cin.ignore(200,'\n');
                            getline(cin,novoDescricaoEvento);
                            agenda.modificaEventoDesc(descricaoEvento, novoDescricaoEvento);
                        }
				    }else{
                        cout<<"Nao ha evento na agenda com essa descricao";
                        cin.ignore(200,'\n');
                        getchar();
				    }

					op2 = 0;
				} else if(op2 == 3){
					cout<<"Digite a descricao do evento"<<endl;
					string descricaoEvento;
					cin.ignore(200,'\n');
					getline(cin,descricaoEvento);
					if(!agenda.removerEvento(descricaoEvento)){
                        cout<<"Nao ha evento com essa descricao"<<endl;
                        cin.ignore(200,'\n');
                        getchar();
					}
					op2 = 0;
				} else if(op2 == 4){
				    string descricaoEvento;
				    cout<<"Digite a descricao do evento"<<endl;
				    cin.ignore(200,'\n');
				    getline(cin,descricaoEvento);
					ItemAgenda * tempEvento= agenda.buscarEvento(descricaoEvento);
					if(tempEvento!=NULL){
                        cout<<"A descricao do evento eh "<<tempEvento->getDescricao()<<endl<<
                        "A data de agendamento eh dia "<<tempEvento->getDataAgendamento().getDia()<<
                        " mes "<<tempEvento->getDataAgendamento().getMes()<<" ano "<<
                        tempEvento->getDataAgendamento().getAno()<<endl<<
                        "A data de atendimento eh dia "<<tempEvento->getDataAtendimento().getDia()<<
                        " mes "<<tempEvento->getDataAtendimento().getMes()<<" ano "<<
                        tempEvento->getDataAtendimento().getAno()<<endl<<
                        "O nome do paciente eh "<<tempEvento->getPaciente()->getNome()<<endl<<
                        "O nome da vacina eh "<<tempEvento->getVacina()->getDescricao()<<endl;
                        cin.ignore(200,'\n');
                        getchar();


					}else{
                        cout<<"Nao ha evento com essa descricao";
                        cin.ignore(200,'\n');
                        getchar();

					}
					op2 = 0;
				} else if(op2 == 5){
				    int op3;
				    cout<<"Tem certeza?"<<endl<<"1 - Sim"<<endl<<"2 - Nao"<<endl;
				    cin>>op3;
				    if(op3==1)
                        agenda.limparAgenda();
					op2 = 0;
				} else if(op2==6){
                    string descricaoEvento;
                    cout<<"Digite a descricao do atendimento"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,descricaoEvento);
                    if(!agenda.atendimentoRealizado(descricaoEvento)){
                        cout<<"Evento nao encontrado.\n";

                    }else{

                        cout<<"Atendimento realizado.\n";
                    }
                    cin.ignore(200,'\n');
                        getchar();
                    op2=0;
				}else op=0;
		}


		/***************************************************************************************************************/
	 	//modulo de gerenciamento de carteira e itemcarteira
	 	while(op == 5){

	 			//limpeza da tela do terminal
				cout << "\e[H\e[2J";

	 			cout << "------------------------------------------------------" << endl;
				cout << "|        ..:: Gerenciamento de Carteira ::..         |" << endl;
				cout << "------------------------------------------------------" << endl;

				//menu do gerenciamento de carteira e itemcarteira
				cout << endl << "1 - Adicionar item a carteira;" << endl << "2 - Alterar item da carteira;" <<
				endl << "3 - Remover item da carteira;" << endl << "4 - Consultar item da carteira;" << endl
				<< "5 - Consultar vacinas tomadas por paciente" << endl << "6 - Retornar ao menu principal." << endl
				<< endl;

				cout << "-> Informe o numero correspondente a opcao desejada: ";
				cin >> op2;
				cout << endl;

				//tratamento de erro do gerenciamento de carteira e itemcarteira
				while((op2 < 1) || (op2 > 6)){

					//limpeza da tela do terminal
					cout << "\e[H\e[2J";

					cout << "------------------------------------------------------" << endl;
					cout << endl << "Esta opcao nao esta cadastrada, tente novamente." << endl << endl;

					cout << endl << "1 - Adicionar item a carteira;" << endl << "2 - Alterar item da carteira;" <<
					endl << "3 - Remover item da carteira;" << endl << "4 - Consultar item da carteira;" << endl
					<< "5 - Consultar vacinas tomadas por paciente" << endl << "6 - Retornar ao menu principal." << endl
					<< endl;

					cout << "-> Informe novamente o numero correspondente a opcao desejada: ";
					cin >> op2;
					cout << endl;
				}
				cout << "\e[H\e[2J";
                string nomePaciente;
                if(op2!=6){
                    cout<<"Digite o nome do paciente que deseja consultar a carteira"<<endl;
                    cin.ignore(200,'\n');
                    getline(cin,nomePaciente);
                    Paciente * tempPaciente=Pesquisa::buscarPaciente(nomePaciente,clientes);

                    if(tempPaciente==NULL){
                        cout<<"Paciente inexistente.\nAbortando...\n"<<endl;
                        cin.ignore(200,'\n');
                        getchar();
                        op2=0;
                        Carteira tempCarteira;
                        cout << "\e[H\e[2J";
                    }else{
                        Carteira &tempCarteira=tempPaciente->getCarteira();
                    //tempPaciente->setNome("Marco");

                    //limpeza da tela do terminal
                        cout << "\e[H\e[2J";

                        //chamada de metodos das opcoes
                        if(op2 == 1){
                            string nomeVacina;
                            int dia, mes, hora, minuto, ano;
                            cout<<"Digite o nome da vacina"<<endl;

                            getline(cin,nomeVacina);
                            cout<<"Digite o dia"<<endl;
                            cin>>dia;
                            cout<<"Digite o mes"<<endl;
                            cin>>mes;
                            cout<<"Digite o ano"<<endl;
                            cin>>ano;
                            cout<<"Digite o hora"<<endl;
                            cin>>hora;
                            cout<<"Digite o minuto"<<endl;
                            cin>>minuto;
                            if(Pesquisa::buscarVacina(nomeVacina,vacinas)!=NULL){
                                tempCarteira.atualizarCarteira(Pesquisa::buscarVacina(nomeVacina,vacinas),Date(dia,mes,ano,hora,minuto));

                            }else{
                                cout<<"Vacina inexistente.\nAbortando...\n";
                                cin.ignore(200,'\n');
                                getchar();
                            }

                            op2 = 0;
                        } else if(op2 == 2){
                            string nomeVacina;
                            int dia, mes, hora, minuto, ano;
                            cout<<"Digite o nome da vacina"<<endl;

                            getline(cin,nomeVacina);
                            cout<<"Digite o dia"<<endl;
                            cin>>dia;
                            cout<<"Digite o mes"<<endl;
                            cin>>mes;
                            cout<<"Digite o ano"<<endl;
                            cin>>ano;
                            cout<<"Digite o hora"<<endl;
                            cin>>hora;
                            cout<<"Digite o minuto"<<endl;
                            cin>>minuto;

                            if(!tempCarteira.alterarItemCarteira(nomeVacina,Date(dia,mes,ano,hora,minuto))){
                                cout<<"Vacina inexistente.\nAbortando...\n";
                                cin.ignore(200,'\n');
                                getchar();
                            }
                            cout << "Chamar aqui o metodo de alterar item da carteira" << endl << endl;
                            op2 = 0;
                        } else if(op2 == 3){
                            string nomeVacina;

                            cout<<"Digite o nome da vacina aplicada no paciente"<<endl;

                            getline(cin,nomeVacina);
                            if(!tempCarteira.removerItemCarteira(nomeVacina)){
                                cout<<"Vacina inexistente.\nAbortando...\n";
                                cin.ignore(200,'\n');
                                getchar();
                            }
                            op2 = 0;
                        } else if(op2 == 4){
                            string nomeVacina;
                            cout<<"Digite o nome da vacina aplicada no paciente"<<endl;
                            getline(cin,nomeVacina);
                            ItemCarteira * tempItemCarteira=tempCarteira.getItemCarteira(nomeVacina);
                            if(tempItemCarteira!=NULL){
                                cout<<"A data de aplicação dessa vacina eh dia "<<
                                tempItemCarteira->getDataAplicacao().getDia()<<" mes "<<
                                tempItemCarteira->getDataAplicacao().getMes()<<" ano "<<
                                tempItemCarteira->getDataAplicacao().getAno()<<"."<<endl;
                                cin.ignore(200,'\n');
                                getchar();
                            }else{
                                cout<<"Vacina não associado ao paciente.\nAbortando...\n";
                                cin.ignore(200,'\n');
                                getchar();
                            }

                            op2 = 0;
                        } else if(op2 == 5){

                            list<ItemCarteira> &vacAplicadas = tempCarteira.getListItemCarteira();
                            if(vacAplicadas.size()!=0){
                                cout<<"Vacinas tomadas pelo paciente:"<<endl;
                                list<ItemCarteira>::iterator it;
                                for (it = vacAplicadas.begin(); it != vacAplicadas.end(); it++) {
                                    cout<<"Vacina "<<it->getVacinaAplicada()->getDescricao()<<";"<<endl;
                                }
                            }else{
                                cout<<"Paciente não tomou vacinas"<<endl;
                            }

                            cin.ignore(200,'\n');
                                getchar();
                            op2 = 0;
                        }else op=0;
                    }
                }else op=0;

		}

        if(op==6){

            salvar(clientes,doencas,vacinas,agenda);
        }
		/***************************************************************************************************************/

	}
	return 0;

}
